import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=23

    第23课
        1. 计算属性 get / set
        2. 只读属性
 */

struct Person {
    
    private var tempName = ""
    
    var name: String {
        get {
            // 这个不行
//            if (tempName) {
//                return tempName
//            }
//            return "unkonw"
            
            // 1 默认
            return tempName
            
            // 2 添加 计算属性 功能
//            return tempName + "_ios"
        }
        set {
//            print("name set" + newValue)
            tempName = newValue
            
            // 3 添加 计算属性 功能
            tempName = newValue + "__class_ios"
        }
    }
    
    // 只读属性 (只有一个 get, 没有set)
    private var tempAge = 10
    var age: Int {
        get {
            return tempAge
        }
    }
    
    
    // 内部可以使用 set/get 外部不可用，提供一个读取的方法
    private var tempHeight = 188.0
    private var height: Double {
        get {
            return tempHeight
        }
        set {
            tempHeight = newValue
        }
    }
    func getHeight() -> Double {
        return self.height
    }
    
    init() {
    }
}


var persion = Person()
print("111 =>\(persion.name)")
persion.name = "srxboys"
print("222 =>\(persion.name)")




print("333 =>\(persion)")
print("333 =>\(persion.age)")



print("444 => \(persion.getHeight())")

// error: 'height' is inaccessible due to 'private' protection level
//print("444 => \(persion.height)")

// error: 'tempHeight' is inaccessible due to 'private' protection level
//print("444 => \(persion.tempHeight)")
